package ig.ejb.metrica.da.util;


import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;

/**
 * The Data Transfer Object class.
 * Created 1/08/2006 05:32:56 PM
 * @author jsanchez
 */
public class EspeciesDTO implements java.io.Serializable {
    
    private java.lang.Integer id;
    private java.sql.Timestamp fechaCorte;
    private java.lang.String isin;
    private java.lang.String nombre;
    private java.lang.String nombreMoneda;
    private java.lang.String nombreEmisor;
    private Double valorEmision;
    private Integer diasXanio;
    private Integer diasXmes;
    private Integer IdMoneda;
    private Integer idEmisor;
    private String nemotecnico;
    private boolean dirty = false; //dirty flag
    
    public EspeciesDTO(){
    }
    // ISIN      NOMBREESPECIE                     NOMBREMONEDA      NOMBREEMISOR              VALOREMISION     DIASXANO     DIASXMES     IDESPECIE     IDMONEDA     IDEMISOR     NEMOTECNICO     
    public EspeciesDTO(java.lang.Integer id, java.sql.Timestamp fechaCorte, java.lang.String isin, java.lang.String nombre, java.lang.String nombreMoneda, java.lang.String nombreEmisor,Double valorEmision, Integer diasXanio, Integer diasXmes,Integer IdMoneda,Integer idEmisor,String nemotecnico ){
        this.id = id;
        this.fechaCorte = fechaCorte;
        this.isin = isin;
        this.nombre = nombre;
        this.nombreMoneda = nombreMoneda;
        this.nombreEmisor = nombreEmisor;
        this.valorEmision=valorEmision;
        this.diasXanio=diasXanio;
        this.diasXmes=diasXmes;
        this.IdMoneda=IdMoneda;
        this.idEmisor=idEmisor;
        this.nemotecnico=nemotecnico;
    
    }
    
    private void setDirty(){
        dirty = true;
    }
    
    public boolean isDirty(){
        return dirty;
    }
    
    public void resetDirty(){
        dirty = false;
    }

    public Integer getDiasXanio() {
        return diasXanio;
    }

    public Integer getDiasXmes() {
        return diasXmes;
    }

    public Integer getIdEmisor() {
        return idEmisor;
    }

    public Integer getIdMoneda() {
        return IdMoneda;
    }

    public String getNemotecnico() {
        return nemotecnico;
    }

    public Double getValorEmision() {
        return valorEmision;
    }

    public void setDiasXanio(Integer diasXanio) {
        this.diasXanio = diasXanio;
        setDirty();
    }

    public void setDiasXmes(Integer diasXmes) {
        this.diasXmes = diasXmes;
                setDirty();
    }

    public void setIdEmisor(Integer idEmisor) {
        this.idEmisor = idEmisor;
                setDirty();
    }

    public void setIdMoneda(Integer IdMoneda) {
        this.IdMoneda = IdMoneda;
        setDirty();    }

    public void setNemotecnico(String nemotecnico) {
        this.nemotecnico = nemotecnico;
        setDirty();    }

    public void setValorEmision(Double valorEmision) {
        this.valorEmision = valorEmision;
        setDirty();    }


    
    public java.lang.Integer getId(){ return id; }
    public void setId(java.lang.Integer id){
        this.id = id;
        setDirty();
    }
    
    public java.sql.Timestamp getFechaCorte(){ return fechaCorte; }
    public void setFechaCorte(java.sql.Timestamp fechaCorte){
        this.fechaCorte = fechaCorte;
        setDirty();
    }
    
    public java.lang.String getIsin(){ return isin; }
    public void setIsin(java.lang.String isin){
        this.isin = isin;
        setDirty();
    }
    
    public java.lang.String getNombre(){ return nombre; }
    public void setNombre(java.lang.String nombre){
        this.nombre = nombre;
        setDirty();
    }
    
    public java.lang.String getNombreMoneda(){ return nombreMoneda; }
    public void setNombreMoneda(java.lang.String nombreMoneda){
        this.nombreMoneda = nombreMoneda;
        setDirty();
    }
    
    public java.lang.String getNombreEmisor(){ return nombreEmisor; }
    public void setNombreEmisor(java.lang.String nombreEmisor){
        this.nombreEmisor = nombreEmisor;
        setDirty();
    }
    
    
    // populate DTO from Object
//    public void populate(Object o) {
//        Method[] methods = o.getClass().getMethods();
//        for (int i = 0; i < methods.length; i++) {
//            try{
//                String methodName = methods[i].getName();
//                if ((methodName.startsWith("get") ||
//                        methodName.startsWith("is"))
//                        && Modifier.isPublic(methods[i].getModifiers())
//                        && methods[i].getParameterTypes().length == 0
//                        && !methodName.equals("getClass")) {
//                    String setMethodName = methodName.replaceFirst(methodName.startsWith("get")?"get":"is","set");
//                    getClass().getMethod(setMethodName,new Class[]{methods[i].getReturnType()}).
//                            invoke(this, new Object[]{methods[i].invoke(o,null)});
//                }
//            }catch(IllegalAccessException ilE){
//                ilE.printStackTrace();
//            }catch(InvocationTargetException invE){
//                invE.printStackTrace();
//            }catch(NoSuchMethodException noE){
//                // Don't find setMethod for field
//            }
//        }
//    }
    
    
    /**
     * @see java.lang.Object#toString()
     */
    public String toString(){
        return getClass().getName() + "[" +
                "id: " + this.id + ", " +
                "fechaCorte: " + this.fechaCorte + ", " +
                "isin: " + this.isin + ", " +
                "nombre: " + this.nombre + ", " +
                "nombreMoneda: " + this.nombreMoneda + ", " +
                "nombreEmisor: " + this.nombreEmisor + "]";
    }
    
    /**
     * @see java.lang.Object#equals(java.lang.Object)
     */
    public boolean equals(java.lang.Object otherOb) {
        
        if (this == otherOb) {
            return true;
        }
        if (!(otherOb instanceof ig.ejb.metrica.da.util.EspeciesDTO)) {
            return false;
        }
        ig.ejb.metrica.da.util.EspeciesDTO other = (ig.ejb.metrica.da.util.EspeciesDTO) otherOb;
        return (
                
                (id==null?other.id==null:id.equals(other.id))
                &&
                (fechaCorte==null?other.fechaCorte==null:fechaCorte.equals(other.fechaCorte))
                &&
                (isin==null?other.isin==null:isin.equals(other.isin))
                &&
                (nombre==null?other.nombre==null:nombre.equals(other.nombre))
                &&
                (nombreMoneda==null?other.nombreMoneda==null:nombreMoneda.equals(other.nombreMoneda))
                &&
                (nombreEmisor==null?other.nombreEmisor==null:nombreEmisor.equals(other.nombreEmisor))
                
                );
    }
    
    /**
     * @see java.lang.Object#hashCode()
     */
    public int hashCode() {
        return (
                
                (id==null?0:id.hashCode())
                ^
                (fechaCorte==null?0:fechaCorte.hashCode())
                ^
                (isin==null?0:isin.hashCode())
                ^
                (nombre==null?0:nombre.hashCode())
                ^
                (nombreMoneda==null?0:nombreMoneda.hashCode())
                ^
                (nombreEmisor==null?0:nombreEmisor.hashCode())
                
                );
    }
    
}
